package IO;

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;

public class Demo2_File {

    /**
     * 关于文件或文件夹的增删改的功能
     * @param file
     */
    public void crud(File file) throws IOException {

        //创建一个新文件
//        boolean newFile = file.createNewFile();
//        System.out.println(newFile);

        //创建一个临时文件
        for (int i = 0; i < 5; i++) {
            //静态方法，使用类直接创建临时文件，可以给定前缀和后缀，还有生成临时文件的目录
            File.createTempFile("temp_",".txt",new File("D://"));
        }


        //创建一个文件夹
//        boolean mkdir = file.mkdir();
//        System.out.println(mkdir);

        //级联创建一个文件夹，如果中间没有的文件夹会自动创建
//        boolean mkdirs = file.mkdirs();
//        System.out.println(mkdirs);

        //给文件或文件夹改名
//        boolean rename = file.renameTo(new File("D://testa/test/b/c"));
//        System.out.println(rename);

//        file.createNewFile();

        //删除文件或空文件夹，如果文件夹下面有内容，不允许删除
//        file.delete();
    }

    /**
     * 关于判断功能的方法
     * @param file
     */
    public void estimate(File file){
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.isAbsolute());
        System.out.println(file.isHidden());
    }

    /**
     * 获取一些功能的方法
     * @param file
     */
    public void getInfo(File file){
        System.out.println(file.getAbsoluteFile());
        System.out.println(file.getParent());
        System.out.println(file.getParentFile());
        System.out.println(file.getPath());
        System.out.println(file.getName());
        System.out.println(file.length());
        System.out.println(file.lastModified());
    }

    /**
     * 关于文件夹的遍历
     * @param file
     */
    public void query(File file){
//        String[] list = file.list();
//        File[] files = file.listFiles();
//        System.out.println(Arrays.toString(files));

        //级联遍历文件夹
        File[] list = null;
        do{
            list = file.listFiles();

            for (File file1 : list) {
                if (file1.isDirectory()) {
                    file = file1;
                }
                System.out.println(file1);
            }
        }while (null!=list && list.length>0);


    }

    /**
     * 递归
     *   在方法体内调用自己本身的方法
     * 适用场景
     *   多次使用相同的逻辑处理代码
     * 注意
     *   递归方法必须有结束条件，如果没有结束条件的话容易报OOM异常
     * 建议
     *   不建议使用：性能不高 对逻辑的要求高
     */
    public static void recDir(File file){

        if(!file.isDirectory()){
            System.out.println("当前file不是文件夹");
            //返回值类型为void，return并不返回任何内容，表示的是终止执行
            return;
        }

        File[] files = file.listFiles();

        for (File file1 : files) {

            if(file1.isFile()){
                System.out.println(file1.getName()+"不是文件夹，无需循环");
            }else if(file1.isDirectory()){
                System.out.println(file1);
                Demo2_File.recDir(file1);
            }
        }
    }



    public static void main(String[] args) throws Exception {

        //通过不同的形式 创建一个 File 对象
        File file_str = new File("D://aaa");
//        File file_pc = new File("D://testa", "test");
//        File file_uri = new File(new URI("file:///D://testa/test"));

        Demo2_File demo2_file = new Demo2_File();
        demo2_file.crud(file_str);

//        demo2_file.query(file_str);
//        Demo2_File.recDir(file_str);


    }


}
